﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
using System.Configuration;
using Entidades.Catalogo;
using System.Data;

namespace Persistencia.Catalogo
{
    public class PerAvanceOperativo : Persistencia.General.IPersistencia
    {
        public void Insertar(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public void Actualizar(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public void Eliminar(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public Entidades.General.IEntidad Obtener(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public List<Entidades.General.IEntidad> ObtenerTodos(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public List<Entidades.General.IEntidad> ObtenerTodos()
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            OracleDataReader lector = null;
            EntAvanceOperativo entidad = null;
            List<Entidades.General.IEntidad> lista = new List<Entidades.General.IEntidad>();

            try
            {
                comando = new OracleCommand("PKG_CATALOGOS.getAvanceOperativo", conexion);
                comando.CommandType = System.Data.CommandType.StoredProcedure;

                conexion.Open();

                OracleParameter cursor = new OracleParameter();
                cursor.OracleDbType = OracleDbType.RefCursor;
                cursor.Direction = ParameterDirection.Output;
                comando.Parameters.Add(cursor);

                lector = comando.ExecuteReader(CommandBehavior.CloseConnection);

                while (lector.Read())
                {
                    entidad = new EntAvanceOperativo();
                    entidad.CveAvanceOperativo = int.Parse(lector["CVE_AVANCE_OPERATIVO"] == DBNull.Value ? "0" : lector["CVE_AVANCE_OPERATIVO"].ToString());
                    entidad.Descripcion = lector["DESCRIPCION"].ToString();

                    lista.Add(entidad);
                }
            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "PerAvanceOperativo.ObtenerTodos";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "PerAvanceOperativo.ObtenerTodos";
                throw excepcion;
            }
            finally
            {
                if (conexion.State == ConnectionState.Open)
                    conexion.Close();

                comando = null;


                if (lector != null)
                    lector.Close();
            }
            return lista;
        }
    }
}
